package com.neouton.crm.prm.entity;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.neouton.common.entity.BaseEntityVO;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.sql.Timestamp;
import java.util.List;

/**
 * 项目回款表
 * @TableName project_returned_money
 */
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ProjectReturnedMoneyVO extends BaseEntityVO implements Serializable {
    /**
     * 项目回款主键
     */
    @ExcelIgnore
    private Integer projectReturnedMoneyId;

    /**
     * 合同单号
     */
    private String contractNumber;

    /**
     * 合同名称
     */
    private String contractName;

    /**
     * 项目名称
     */
    private String projectTheme;

    /**
     * 客户名称
     */
    private String clientName;

    /**
     * 负责人
     */
    private Integer projectPrincipal;
    /**
     * 负责人集合
     */
    private List<Integer> projectPrincipalList;
    /**
     * 负责人
     */
    private String projectPrincipals;

    /**
     * 回款跟踪
     */
    private Integer returnedPrincipal;
    private List<Integer> returnedPrincipalList;
    /**
     * 回款跟踪
     */
    private String returnedPrincipals;

    /**
     * 项目归属
     */
    private Integer projectAffiliation;
    private List<Integer> projectAffiliationList;
    private String projectAffiliationName;

    /**
     * 合同日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Timestamp contractDate;

    /**
     * 合同日期始
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Timestamp contractDateStart;

    /**
     * 合同日期末
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Timestamp contractDateEnd;

    /**
     * 合同总金额
     */
    private String contractMoney;

    /**
     * 预留利润
     */
    private String reservedMoney;

    /**
     * 已回款金额
     */
    private String returnedMoney;

    /**
     * 已开票金额
     */
    private String invoicedMoney;

    /**
     * 余款总金额
     */
    private String balanceMoney;

    /**
     * 当期状态
     */
    private Integer projectState;
    /**
     * 当期状态集合
     */
    private List<Integer> projectStateList;
    /**
     * 当期状态
     */
    private String projectStates;

    /**
     * 回款期次
     */
    private Integer returnedMoneyPeriodState;
    /**
     * 回款期次
     */
    private String returnedMoneyPeriodStates;

    /**
     * 计划回款日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Timestamp returnedMoneyPlanDate;

    /**
     * 计划回款日期始
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Timestamp returnedMoneyPlanDateStart;

    /**
     * 计划回款日期末
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Timestamp returnedMoneyPlanDateEnd;

    /**
     * 实际回款日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Timestamp returnedMoneyDate;

    /**
     * 实际回款日期始
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Timestamp returnedMoneyDateStart;

    /**
     * 实际回款日期末
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Timestamp returnedMoneyDateEnd;

    /**
     * 当期计划回款金额
     */
    private String returnMoney;

    /**
     * 当期实际回款金额
     */
    private String returnMoneyNow;

    /**
     * 开票状态
     */
    private Integer invoiceState;
    /**
     * 开票状态集合
     */
    private List<Integer> invoiceStateList;
    /**
     * 开票状态
     */
    private String invoiceStates;

    /**
     * 逾期天数
     */
    private Integer overdueDays;
    /**
     * 逾期天数始
     */
    private Integer overdueDaysStart;
    /**
     * 逾期天数末
     */
    private Integer overdueDaysEnd;

    /**
     * 逾期罚息
     */
    private String overdueMoney;

    /**
     * 回款进展
     */
    private ReturnedMoneyProgressVO progressVO;

    /**
     * 回款进展
     */
    private String progressInfo;

    private static final long serialVersionUID = 1L;

    /**
     * 前端排序标识
     */
    @TableField(exist = false)
    private String orderByColum;

    @TableField(exist = false)
    private String orderByProp;

    @TableField(exist = false)
    private String order;

    /**
     * 合同总金额 分页
     */
    private String contractMoneyPage;
    /**
     * 合同总金额 合计
     */
    private String contractMoneyTotal;

    /**
     * 预留利润 分页
     */
    private String reservedMoneyPage;
    /**
     * 预留利润 合计
     */
    private String reservedMoneyTotal;

    /**
     * 已回款金额 分页
     */
    private String returnedMoneyPage;
    /**
     * 已回款金额 合计
     */
    private String returnedMoneyTotal;

    /**
     * 已开票金额 分页
     */
    private String invoicedMoneyPage;
    /**
     * 已开票金额 合计
     */
    private String invoicedMoneyTotal;

    /**
     * 余款总金额 分页
     */
    private String balanceMoneyPage;
    /**
     * 余款总金额 合计
     */
    private String balanceMoneyTotal;

    /**
     * 当期计划回款金额
     */
    private String returnMoneyPage;
    /**
     * 当期计划回款金额
     */
    private String returnMoneyTotal;

    /**
     * 当期实际回款金额
     */
    private String returnMoneyNowPage;
    /**
     * 当期实际回款金额
     */
    private String returnMoneyNowTotal;

    /**
     * 逾期罚息
     */
    private String overdueMoneyPage;
    /**
     * 逾期罚息
     */
    private String overdueMoneyTotal;

    /**
     * 消息状态 标志：0未发送，1已发送
     */
    private Integer flag;

    /**
     * 回款id
     */
    private Integer bmpId;
    private List<Integer> bmpIdList;
    /**
     * 项目管理主键
     */
    private Integer projectManageId;
}